//
//  FGStatusViewModel.swift
//  飞哥大微博
//
//  Created by huangfei on 2017/6/11.
//  Copyright © 2017年 huangfei. All rights reserved.
//

import Foundation

/// 单条微博的视图模型
// 如果没有任何父类，如果在开发时调试，输出调试信息，需要
// 1. 遵守 CustomStringConvertible
// 2. 实现 description 计算型属性

/*
 关于表格的性能优化：
 - 尽量少计算，所有需要的素材提前计算好
 - 控件上不要设置圆角半径，所有图像渲染的属性，都要注意
 - 不要动态创建控件，所有需要的控件，都要提前创建好，在显示的时候，根据数据隐藏/显示
 - cell 中控件的层次越少越好，数量越少越好
 */
class FGStatusViewModel:CustomStringConvertible {
    
    /// 微博模型
    var status:FGStatus
    /// 会员图标 - 存储型属性（用内存换CPU）
    var memberIcon : UIImage?
    /// 认证类型， -1：没有认证，0：认证用户，2，3，5：企业认证，220：达人
    var vipIcon : UIImage?
    /// 转发文字
    var retweetedStr:String?
    /// 评论文字
    var commentStr:String?
    /// 点赞文字
    var likeStr:String?
    
    /// 配图视图大小
    var pictureViewSize = CGSize()
    
    /// 构造函数
    ///
    /// - Parameter model: 微博模型
    /// - returns: 微博的视图模型
    init(model:FGStatus) {
        self.status = model
        
        // 直接计算出会员图标/会员等级 0-6
        if (model.user?.mbrank)! > 0 && (model.user?.mbrank)! < 7 {
            let imageName = "common_icon_membership_level\(model.user?.mbrank ?? 1)"
            memberIcon = UIImage(named: imageName)
        } else {
            let imageName = "common_icon_membership"
            memberIcon = UIImage(named: imageName)
        }
         
        // 认证图标
        switch model.user?.verified_type ?? -1 {
        case 0:
            vipIcon = UIImage(named: "avatar_vip")
        case 2,3,5:
            vipIcon = UIImage(named: "avatar_enterprise_vip")
        case 220:
            vipIcon = UIImage(named: "avatar_grassroot")
        default:
            break
        }
        
        // 设置底部计数字符串
        retweetedStr = countString(count: model.reposts_count, defaultStr: "转发")
        commentStr = countString(count: model.comments_count, defaultStr: "评论")
        likeStr = countString(count: model.attitudes_count, defaultStr: "赞")
        
        // 计算配图视图大小
        pictureViewSize = calcPictureViewSize(count: status.pic_urls?.count)
    }
    
    var description: String {
        return status.description
    }
    
    private func calcPictureViewSize(count:Int?) -> CGSize {
<<<<<<< HEAD
        if count == 0 || count == nil {
            return CGSize()
        }
        return CGSize(width: 100, height: 100)
=======
        
        if count == 0 || count == nil {
            return CGSize()
        }
        // 计算配图视图的宽度(放入全局常量区)
        // 2.计算高度
        let row = (count! - 1) / 3 + 1
        // 根据行数算高度
        let height = FGStatusPictureViewOutterMargin + CGFloat(row) * FGStatusPictureItemWidth + (CGFloat(row) - 1) * FGStatusPictureViewInnerMargin
        
        return CGSize(width: FGStatusPictureViewWidth, height: height)
>>>>>>> e0b626da88b615e4b4830056fc1cbbfeca6f45d7
    }
    
    /// 给定一个数字，返回对应的描述结果
    ///
    /// - Parameters:
    ///   - count: 数字
    ///   - defaultStr: 默认字符串，转发/评论/赞
    /// - Returns: 描述结果
    private func countString(count:Int,defaultStr:String) -> String {
        
        if count == 0 {
            return defaultStr
        }
        if count < 10000 {
            return count.description
        }
        return String(format: "%.02f 万", Double(count) / 10000)
    }
}
